// utils/api/shippingAddress.js
import { get, post, put, del } from '@/utils/request'
import apiResponse from '@/utils/apiResponse.js'
import apiDebugger from '@/utils/api-debugger.js'
import { detectAddressFields, adaptDataWithMapping, debugFieldDetection } from '@/utils/field-detector.js'

/**
 * 收货地址相关API接口
 */
export const shippingAddressApi = {
  /**
   * 获取用户收货地址列表
   * @param {Object} params - 查询参数
   * @param {number} params.pageNum - 页码
   * @param {number} params.pageSize - 每页数量
   * @param {number} params.userId - 用户ID
   */
  async getAddressList(params = {}) {
    try {
      const response = await get('/core/shippingAddresses/list', params)
      return apiResponse.handle(response, '', '获取地址列表失败')
    } catch (error) {
      return apiResponse.handleError(error, '获取地址列表失败')
    }
  },

  /**
   * 获取当前登录用户的收货地址列表（用户端接口）
   */
  async getUserAddresses() {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      console.log('🔍 开始调用获取用户地址列表API...')
      const response = await get('/core/shippingAddresses/user/list')
      
      // 调试API响应
      apiDebugger.printFullDebug('getUserAddresses', {}, response)
      
      // 处理响应数据
      const result = apiResponse.handle(response, '', '获取地址列表失败')
      
      // 如果成功获取数据，进行字段适配
      if (result.success && result.data && result.data.length > 0) {
        console.log('🔄 开始智能字段检测和适配...')
        const originalData = result.data
        
        // 检测字段映射关系
        const fieldMapping = detectAddressFields(originalData[0])
        debugFieldDetection(originalData[0], fieldMapping)
        
        // 根据映射关系适配所有数据
        const adaptedData = originalData.map(item => adaptDataWithMapping(item, fieldMapping))
        
        console.log('✅ 字段适配完成，原始数据:', originalData.length, '条，适配后:', adaptedData.length, '条')
        result.data = adaptedData
      }
      
      return result
    } catch (error) {
      console.error('❌ 获取用户地址列表失败:', error)
      return apiResponse.handleError(error, '获取地址列表失败')
    }
  },

  /**
   * 获取收货地址详情
   * @param {number} id - 地址ID
   */
  async getAddressDetail(id) {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      const response = await get(`/core/shippingAddresses/${id}`)
      const result = apiResponse.handle(response, '', '获取地址详情失败')
      
      // 如果成功获取数据，进行字段适配
      if (result.success && result.data) {
        console.log('🔄 开始字段适配（地址详情）...')
        const originalData = result.data
        
        // 检测字段映射关系
        const fieldMapping = detectAddressFields(originalData)
        debugFieldDetection(originalData, fieldMapping)
        
        // 根据映射关系适配数据
        const adaptedData = adaptDataWithMapping(originalData, fieldMapping)
        
        console.log('✅ 字段适配完成（地址详情）')
        result.data = adaptedData
      }
      
      return result
    } catch (error) {
      return apiResponse.handleError(error, '获取地址详情失败')
    }
  },

  /**
   * 新增收货地址（用户端接口）
   * @param {Object} data - 地址信息
   */
  async addAddress(data) {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      const response = await post('/core/shippingAddresses/user', data)
      return apiResponse.handle(response, '新增地址成功', '新增地址失败')
    } catch (error) {
      return apiResponse.handleError(error, '新增地址失败')
    }
  },

  /**
   * 修改收货地址（用户端接口）
   * @param {Object} data - 地址信息
   */
  async updateAddress(data) {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      const response = await put('/core/shippingAddresses/user', data)
      return apiResponse.handle(response, '修改地址成功', '修改地址失败')
    } catch (error) {
      return apiResponse.handleError(error, '修改地址失败')
    }
  },

  /**
   * 删除收货地址（用户端接口）
   * @param {number} id - 地址ID
   */
  async deleteAddress(id) {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      const response = await del(`/core/shippingAddresses/user/${id}`)
      return apiResponse.handle(response, '删除地址成功', '删除地址失败')
    } catch (error) {
      return apiResponse.handleError(error, '删除地址失败')
    }
  },

  /**
   * 设置默认地址（用户端接口）
   * @param {number} id - 地址ID
   */
  async setDefaultAddress(id) {
    try {
      if (!apiResponse.checkLogin()) {
        return { success: false, data: null, message: '用户未登录' }
      }
      
      const response = await post(`/core/shippingAddresses/user/${id}/setDefault`)
      return apiResponse.handle(response, '设置默认地址成功', '设置默认地址失败')
    } catch (error) {
      return apiResponse.handleError(error, '设置默认地址失败')
    }
  }
}

export default shippingAddressApi 